"""
@Project ：python
@File    ：02-函数多种传参方式.py
@IDE     ：PyCharm
@Author  ：DongCha
@Date    ：2024/4/5 005 16:50
"""


# 使用方式上的不同，函数中有4中常见参数使用方式


# 位置参数：调用函数时，根据函数定义的参数位置传递参数，传递的参数和定义参数的顺序以及个数必须一致
def user_info(name, age, gender):
    print(f"name: {name}, age: {age}, gender: {gender}")


user_info("位置参数", 20, "男")

# 关键字参数：函数调用时通过 “key=value” 形式传递参数
# 作用：可以让函数更加清晰、容易使用，同时清除参数顺序需求
# 关键字传参
user_info(name="关键字传参", age=20, gender="男")
# 可以不按顺序
user_info(age=20, gender="男", name="不按顺序")
# 可以和位置参数混用，位置参数必须在前，且匹配顺序
user_info("位置参数混用", age=20, gender="男")


# 缺省参数：也成为默认参数，用于为参数提供默认值，调用函数时可以不传值，所有位置参数必须出现在默认参数前，包括函数定义和调用
def user_info(name, age, gender="男"):
    print(f"name: {name}, age: {age}, gender: {gender}")


user_info("缺省参数", 23)
# 像缺省参数传值，改变默认值
user_info("缺省参数传值", 22, "武装直升机")


# 不定长参数：也称为可变参数，用于不确定调用时会传递多少个参数（不传参也可以）的场景
# 当调用函数时不能确定参数个数时，可以使用不定长参数
def user_info(*args):
    print(args)


# 位置传参：所有传进参数都会被 args 收集，根据传进位置合并为一个元组
user_info("不定长位置传参")
user_info("不定长位置传参", 18)


# 关键字传参：参数是 “key=value” 的情况下，所有的传入参数都会被 kwargs 接收，组合成一个字典
def user_info(**kwargs):
    print(kwargs)


user_info(name="不定长关键字传参", age=18, gender="aaa")
user_info(name="不定长关键字传参", age=18, gender="aaa", id=33)
